/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * TelaVenda.java
 *
 * Created on 05/12/2010, 18:52:20
 */
package sysype;

import com.sun.org.apache.xalan.internal.xsltc.util.IntegerArray;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.MathContext;
import java.math.RoundingMode;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

/**
 *
 * @author SERVIDOR
 */
public class TelaVenda extends javax.swing.JInternalFrame {

    /** Creates new form TelaVenda */
    public TelaVenda() {
        initComponents();
        cnx = new ConexaoMySQL();
        pesquisaProduto();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jspProduto = new javax.swing.JScrollPane();
        jtProduto = new javax.swing.JTable();
        jLabel1 = new javax.swing.JLabel();
        jtPesquisa = new javax.swing.JTextField();
        jspItemVenda = new javax.swing.JScrollPane();
        jtItemVenda = new javax.swing.JTable();
        jlValorTotal = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jtDinheiro = new javax.swing.JTextField();
        jlTroco = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jbAdcionarItem = new javax.swing.JButton();
        jbExcluirItem = new javax.swing.JButton();
        jbConcluir = new javax.swing.JButton();
        jTextField2 = new javax.swing.JTextField();
        jLabel7 = new javax.swing.JLabel();
        jButton4 = new javax.swing.JButton();
        jtfDinheiro = new javax.swing.JFormattedTextField();

        setBackground(new java.awt.Color(255, 255, 255));
        setClosable(true);
        setIconifiable(true);
        setTitle("Vendas");
        getContentPane().setLayout(null);

        jtProduto.setFont(new java.awt.Font("Arial", 0, 12));
        jtProduto.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Codigo", "Referencia", "Nome do Produto", "Estoque"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jtProduto.setRowHeight(20);
        jtProduto.setRowMargin(0);
        jtProduto.getTableHeader().setReorderingAllowed(false);
        jspProduto.setViewportView(jtProduto);
        jtProduto.getColumnModel().getColumn(0).setResizable(false);
        jtProduto.getColumnModel().getColumn(1).setResizable(false);
        jtProduto.getColumnModel().getColumn(2).setResizable(false);
        jtProduto.getColumnModel().getColumn(3).setResizable(false);

        getContentPane().add(jspProduto);
        jspProduto.setBounds(20, 90, 390, 20);

        jLabel1.setFont(new java.awt.Font("Arial", 0, 12));
        jLabel1.setText("Nome do produto");
        getContentPane().add(jLabel1);
        jLabel1.setBounds(30, 40, 110, 23);

        jtPesquisa.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jtPesquisaKeyReleased(evt);
            }
        });
        getContentPane().add(jtPesquisa);
        jtPesquisa.setBounds(150, 40, 240, 25);

        jtItemVenda.setFont(new java.awt.Font("Arial", 0, 12));
        jtItemVenda.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Codigo", "Referencia", "Nome do Produto", "Preço Unitario", "Quantidade", "Preço total"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jtItemVenda.setRowHeight(20);
        jtItemVenda.setRowMargin(0);
        jtItemVenda.getTableHeader().setReorderingAllowed(false);
        jspItemVenda.setViewportView(jtItemVenda);
        jtItemVenda.getColumnModel().getColumn(0).setResizable(false);
        jtItemVenda.getColumnModel().getColumn(1).setResizable(false);
        jtItemVenda.getColumnModel().getColumn(3).setResizable(false);
        jtItemVenda.getColumnModel().getColumn(4).setResizable(false);
        jtItemVenda.getColumnModel().getColumn(5).setResizable(false);

        getContentPane().add(jspItemVenda);
        jspItemVenda.setBounds(450, 90, 450, 170);

        jlValorTotal.setFont(new java.awt.Font("Arial", 0, 36));
        jlValorTotal.setForeground(new java.awt.Color(255, 51, 51));
        jlValorTotal.setText("0");
        getContentPane().add(jlValorTotal);
        jlValorTotal.setBounds(550, 370, 220, 50);

        jLabel3.setFont(new java.awt.Font("Arial", 0, 36));
        jLabel3.setForeground(new java.awt.Color(255, 0, 0));
        jLabel3.setText("Valor total da compra:");
        getContentPane().add(jLabel3);
        jLabel3.setBounds(180, 380, 410, 30);

        jLabel2.setFont(new java.awt.Font("Arial", 0, 36)); // NOI18N
        jLabel2.setForeground(new java.awt.Color(0, 204, 0));
        jLabel2.setText("Dinheiro:");
        getContentPane().add(jLabel2);
        jLabel2.setBounds(180, 430, 150, 40);

        jLabel4.setFont(new java.awt.Font("Arial", 0, 36));
        jLabel4.setForeground(new java.awt.Color(255, 255, 0));
        jLabel4.setText("Troco:");
        getContentPane().add(jLabel4);
        jLabel4.setBounds(180, 490, 160, 43);

        jtDinheiro.setFont(new java.awt.Font("Arial", 0, 36)); // NOI18N
        jtDinheiro.setForeground(new java.awt.Color(0, 204, 51));
        jtDinheiro.setHorizontalAlignment(javax.swing.JTextField.LEFT);
        jtDinheiro.setText("0");
        jtDinheiro.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jtDinheiroActionPerformed(evt);
            }
        });
        jtDinheiro.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jtDinheiroKeyReleased(evt);
            }
        });
        getContentPane().add(jtDinheiro);
        jtDinheiro.setBounds(550, 430, 220, 50);

        jlTroco.setFont(new java.awt.Font("Arial", 0, 36));
        jlTroco.setForeground(new java.awt.Color(255, 255, 0));
        jlTroco.setText("0");
        getContentPane().add(jlTroco);
        jlTroco.setBounds(550, 490, 220, 50);

        jLabel6.setFont(new java.awt.Font("Arial", 0, 30));
        jLabel6.setText("Itens na Venda");
        getContentPane().add(jLabel6);
        jLabel6.setBounds(580, 20, 210, 40);

        jbAdcionarItem.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N
        jbAdcionarItem.setText("Adcionar Item");
        jbAdcionarItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbAdcionarItemActionPerformed(evt);
            }
        });
        getContentPane().add(jbAdcionarItem);
        jbAdcionarItem.setBounds(290, 310, 120, 40);

        jbExcluirItem.setFont(new java.awt.Font("Arial", 0, 12));
        jbExcluirItem.setText("Excluir Item");
        jbExcluirItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbExcluirItemActionPerformed(evt);
            }
        });
        getContentPane().add(jbExcluirItem);
        jbExcluirItem.setBounds(450, 310, 120, 40);

        jbConcluir.setFont(new java.awt.Font("Arial", 0, 12));
        jbConcluir.setText("Concluir Venda");
        jbConcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbConcluirActionPerformed(evt);
            }
        });
        getContentPane().add(jbConcluir);
        jbConcluir.setBounds(380, 540, 120, 40);

        jTextField2.setFont(new java.awt.Font("Tahoma", 0, 18));
        jTextField2.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        jTextField2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField2ActionPerformed(evt);
            }
        });
        getContentPane().add(jTextField2);
        jTextField2.setBounds(220, 310, 50, 40);

        jLabel7.setFont(new java.awt.Font("Tahoma", 0, 24));
        jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel7.setText("Quantidade:");
        getContentPane().add(jLabel7);
        jLabel7.setBounds(70, 310, 150, 40);

        jButton4.setText("jButton4");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton4);
        jButton4.setBounds(60, 400, 75, 23);

        jtfDinheiro.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#,##0.00"))));
        jtfDinheiro.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jtfDinheiroKeyReleased(evt);
            }
        });
        getContentPane().add(jtfDinheiro);
        jtfDinheiro.setBounds(440, 430, 100, 40);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jbAdcionarItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbAdcionarItemActionPerformed
        cnx.Conexao();
        ResultSet r;
        String nome, referencia, codigo, preco, quantidadeProduto;
        double valorTotal=0, subTotal;
        DefaultTableModel mod = (DefaultTableModel) jtItemVenda.getModel();
        Object obj = jtProduto.getValueAt(jtProduto.getSelectedRow(), 0);
        String cod = String.valueOf(obj);
        r = cnx.preencheDataSet("select * from produto where id_produto like '%" + cod + "%' limit 10", 1);
        try {
            while (r.next()) {
                codigo = r.getString("id_produto");
                referencia = r.getString("ref_produto");
                nome = r.getString("nom_produto");
                preco = r.getString("prc_compra");
                quantidadeProduto = jTextField2.getText();
                subTotal = Double.parseDouble(quantidadeProduto) * Double.parseDouble(preco);
                valorTotal=Double.parseDouble(jlValorTotal.getText()) + subTotal;
                String[] array = {codigo, referencia, nome, preco, quantidadeProduto, Double.toString(subTotal)};
                mod.addRow(array);

            }

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex);
        }
        /*Rectangle d = jspItemVenda.getBounds();
        jspItemVenda.setBounds(d.x, d.y, d.width,mod.getRowCount()*20+20-1);
        jtItemVenda.setBounds(0,0,d.width,mod.getRowCount()*20+20);*/
        BigDecimal valorExato = new BigDecimal(valorTotal).setScale(2, RoundingMode.HALF_UP);
        //String totalFormatado = new DecimalFormat("0000.00").format(valorTotal);
        jlValorTotal.setText(valorExato.toString());
        
        cnx.fecharConexao();


}//GEN-LAST:event_jbAdcionarItemActionPerformed

    private void jtPesquisaKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jtPesquisaKeyReleased
        pesquisaProduto();
        Rectangle d = jspProduto.getBounds();
        DefaultTableModel mod = (DefaultTableModel) jtProduto.getModel();
        jspProduto.setBounds(d.x,d.y,d.width,mod.getRowCount()*20+20-1);
        jtProduto.setBounds(0,0,d.width,mod.getRowCount()*20+20);
        /* cnx.Conexao();
        ResultSet r;
        String nome, referencia, codigo, estoque;
        DefaultTableModel mod = (DefaultTableModel) jtProduto.getModel();
        mod.setNumRows(0);


        if (jtPesquisa.getText().equals("")) {
            r = cnx.preencheDataSet("select * from produto limit 0,10", 1);


            try {
                while (r.next()) {
                    codigo = r.getString("id_produto");
                    referencia = r.getString("ref_produto");
                    nome = r.getString("nom_produto");
                    estoque = r.getString("quantidade_estoque");
                    String[] array = {codigo, referencia, nome, estoque};
                    mod.addRow(array);


                }
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, ex);


            }
        } else {
            r = cnx.preencheDataSet("select * from produto where nom_produto like '%" + jtPesquisa.getText() + "%' limit 10", 1);


            try {
                while (r.next()) {
                    codigo = r.getString("id_produto");
                    referencia = r.getString("ref_produto");
                    nome = r.getString("nom_produto");
                    estoque = r.getString("quantidade_estoque");
                    String[] array = {codigo, referencia, nome, estoque};
                    mod.addRow(array);


                }
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, ex);


            }
        }*/
    }//GEN-LAST:event_jtPesquisaKeyReleased

    private void jbExcluirItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbExcluirItemActionPerformed
        DefaultTableModel mod = (DefaultTableModel) jtItemVenda.getModel();
        Object obj = jtItemVenda.getValueAt(jtItemVenda.getSelectedRow(), 5);
        String tot = String.valueOf(obj);
        jlValorTotal.setText(Float.toString(Float.parseFloat(jlValorTotal.getText()) - Float.parseFloat(tot)));
        jlTroco.setText(Float.toString(Float.parseFloat(jtDinheiro.getText()) - Float.parseFloat(jlValorTotal.getText())));
        mod.removeRow(jtItemVenda.getSelectedRow());
    }//GEN-LAST:event_jbExcluirItemActionPerformed

    private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextField2ActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_jTextField2ActionPerformed

    private void jtDinheiroKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jtDinheiroKeyReleased
        double troco,valorTotal,dinheiro;
        valorTotal=Double.parseDouble(jlValorTotal.getText());
        dinheiro=Double.parseDouble(jtDinheiro.getText());
        troco=dinheiro-valorTotal;
        BigDecimal trocoFormatado = new BigDecimal(troco).setScale(2,RoundingMode.HALF_UP);
        BigDecimal valorTotalFormatado = new BigDecimal(valorTotal).setScale(2, RoundingMode.HALF_UP);
        //BigDecimal dinheiroFormatado = new BigDecimal(dinheiro).setScale(2, RoundingMode.HALF_UP);
        jlTroco.setText(trocoFormatado.toString());
        
    }//GEN-LAST:event_jtDinheiroKeyReleased

    private void jbConcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbConcluirActionPerformed
        cnx.Conexao();
        Object obj;
        String qnt, cod;
        for (int i = 0; i < jtItemVenda.getRowCount(); i++) {
            obj = jtItemVenda.getValueAt(i, 4);
            qnt = String.valueOf(obj);
            obj = jtItemVenda.getValueAt(i, 0);
            cod = String.valueOf(obj);
            cnx.preencheDataSet("UPDATE `bd_ipe`.`produto` SET `quantidade_estoque`=`quantidade_estoque`-'"+qnt+"'WHERE `produto`.`id_produto` ='"+cod+"'  LIMIT 1 ;", 2);
            DefaultTableModel mod = (DefaultTableModel) jtItemVenda.getModel();
            mod.setNumRows(0);
            jlTroco.setText("");
            jlValorTotal.setText("");
            jtDinheiro.setText("");
            pesquisaProduto();
            JOptionPane.showMessageDialog(null,"Venda efetuada com sucesso");
        }



    }//GEN-LAST:event_jbConcluirActionPerformed

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
            double xx = 0.885650224;
BigDecimal teste = new BigDecimal(xx);
teste = teste.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(teste);
double xx2 = 0.885650224; 
BigDecimal teste2 = new BigDecimal(xx2);
teste2 = teste2.setScale(2, BigDecimal.ROUND_DOWN);
System.out.println(teste2);// TODO add your handling code here:
    }//GEN-LAST:event_jButton4ActionPerformed

    private void jtDinheiroActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jtDinheiroActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_jtDinheiroActionPerformed

    private void jtfDinheiroKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jtfDinheiroKeyReleased
       if(!jtfDinheiro.getText().equals("")){
            double troco,valorTotal,dinheiro;
            valorTotal=Double.parseDouble(jlValorTotal.getText().replace(',','.'));
            dinheiro=Double.parseDouble(jtfDinheiro.getText().replace(',','.'));
            troco=dinheiro-valorTotal;
            BigDecimal trocoFormatado = new BigDecimal(troco).setScale(2,RoundingMode.HALF_UP);
            BigDecimal valorTotalFormatado = new BigDecimal(valorTotal).setScale(2, RoundingMode.HALF_UP);
            BigDecimal dinheiroFormatado = new BigDecimal(dinheiro).setScale(2, RoundingMode.HALF_UP);
            String dinheiroString = dinheiroFormatado.toString();
            String trocoString= trocoFormatado.toString();
            int posicao=trocoString.indexOf('.');
            trocoString=trocoString.substring(0,posicao+3);
            posicao=dinheiroString.indexOf('.');
            jtfDinheiro.setText(dinheiroString.substring(0,posicao+3));
            jlTroco.setText(trocoString.replace('.', ','));
            System.out.println("teste "+trocoFormatado+"trcostring: "+dinheiroString.substring(0,posicao+3));
        }
       else{
           jlTroco.setText("0");
       }
    }//GEN-LAST:event_jtfDinheiroKeyReleased

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton4;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JButton jbAdcionarItem;
    private javax.swing.JButton jbConcluir;
    private javax.swing.JButton jbExcluirItem;
    private javax.swing.JLabel jlTroco;
    private javax.swing.JLabel jlValorTotal;
    private javax.swing.JScrollPane jspItemVenda;
    private javax.swing.JScrollPane jspProduto;
    private javax.swing.JTextField jtDinheiro;
    private javax.swing.JTable jtItemVenda;
    private javax.swing.JTextField jtPesquisa;
    private javax.swing.JTable jtProduto;
    private javax.swing.JFormattedTextField jtfDinheiro;
    // End of variables declaration//GEN-END:variables
    ConexaoMySQL cnx;

    void pesquisaProduto(){
        cnx.Conexao();
        ResultSet r;
        String codigo,nome,referencia,quantidadeEstoque;
        DefaultTableModel mod = (DefaultTableModel) jtProduto.getModel();
        mod.setNumRows(0);
        if(jtPesquisa.getText().equals("")){
             r = cnx.preencheDataSet("select * from produto limit 0,10",1);
            try {
                while (r.next()) {
                    codigo = r.getString("id_produto");
                    referencia = r.getString("ref_produto");
                    nome = r.getString("nom_produto");
                    quantidadeEstoque = r.getString("quantidade_estoque");
                    String[] array = {codigo,referencia,nome,quantidadeEstoque};
                    mod.addRow(array);
                }
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, ex);
            }
        }else{
             r = cnx.preencheDataSet("select * from produto where nom_produto like '%"+jtPesquisa.getText()+"%' limit 10"  , 1);
            try {
                while (r.next()) {
                    codigo = r.getString("id_produto");
                    referencia = r.getString("ref_produto");
                    nome = r.getString("nom_produto");
                    quantidadeEstoque = r.getString("quantidade_estoque");
                    String[] array = {codigo,referencia,nome,quantidadeEstoque};
                    mod.addRow(array);
                }
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, ex);
            }
        }// TO
    }
}
